// 导入koka
const Router = require('koa-router');

const Koa = require('koa');
const cors = require('@koa/cors'); // 中间件, 跨域访问等
const app = new Koa();
const bodyParser = require('koa-bodyparser')

// 使用ctx.body解析中间件

// 导入 router

const router = new Router();

//配置路由
// todo ctx 上下文 context, request response信息
// todo async promise对象，可以串着写,分开写都行

router.get('/', async (ctx,next) => {     // http://127.0.0.1:3000/a
    ctx.body = "this is get page / ";
    console.log(111)
    // await next()
})
    .get('/a', async (ctx,next) => {     // http://127.0.0.1:3000/a
    ctx.body = "this is get page a ";
    console.log(333)
    // await next()

}).get('/b', async (ctx,next) => {  // http://127.0.0.1:3000/b
    ctx.body = 'this is get page b';
    await next()
});


// todo 中间件
app.use(async (ctx,next)=>{
    console.log("this is 中间件1");
    await next();   // todo 如果注释这句，只会 输出  中间1的进入和回程 打印， 网页也不会输出

    if (ctx.status == 404){ // 通过 next() 方法 匹配到是否有路由，否则Status,没有数值
        console.log(404);
        ctx.body = "ths is 404"
    }

    console.log("this is 中间1的 回程")
});

app.use(async (ctx,next)=>{
    console.log("this is 中间件2")
    await next()
    console.log("this is 中间2的 回程")
});
// todo 中间件机制，类似 django,
// 访问http://127.0.0.1:3000/a
// output:
// this is 中间件1          先进后出
// this is 中间件2
// 333                      这是是网页输出
// this is 中间2的 回程      后进先出
// this is 中间1的 回程

// todo 启动路由
app
    .use(cors())
    .use(router.routes())

// 欢迎信息
// let appName= "koa2"
// let appObject ={
//     appName, // todo 不需要在写 appNmae:appName
//     showAppName(){
//         return  appName
//     }
// };

// app.use( async (ctx)=>{
//     console.log(ctx)
//     ctx.body=`你好,${appObject.showAppName()}`
// });

app.listen(3000);
console.log('[demo] start-quick is starting at port 3000') // 打印到终端 而不是网页console